// -*- C++ -*-
//===-- execution ---------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef _TEST_SUPPORT_STDLIB_EXECUTION
#define _TEST_SUPPORT_STDLIB_EXECUTION

// #include_next <execution> // None of the standard libraries PSTL is built on top have the <execution> header yet.

#include <pstl/internal/pstl_config.h>
#include <pstl/internal/execution_defs.h>

#define _PSTL_EXECUTION_POLICIES_DEFINED 1

#if _PSTL_ALGORITHM_FORWARD_DECLARED
#    include <pstl/internal/glue_algorithm_impl.h>
#endif

#if _PSTL_MEMORY_FORWARD_DECLARED
#    include <pstl/internal/glue_memory_impl.h>
#endif

#if _PSTL_NUMERIC_FORWARD_DECLARED
#    include <pstl/internal/glue_numeric_impl.h>
#endif

#if _PSTL_CPP17_EXECUTION_POLICIES_PRESENT
_PSTL_PRAGMA_MESSAGE_POLICIES("The <Parallel STL> execution policies are defined in the namespace __pstl::execution")
#else
#    include <pstl/internal/glue_execution_defs.h>
_PSTL_PRAGMA_MESSAGE_POLICIES(
    "The <Parallel STL> execution policies are injected into the standard namespace std::execution")
#endif

//TODO: __pstl::execution namespace is injected into the pstl::execution namespace when the implementation is not a part of
// standard C++ library
namespace pstl
{
namespace execution
{
using namespace __pstl::execution;
}
} // namespace pstl

#endif /* _TEST_SUPPORT_STDLIB_EXECUTION */
